#include <iostream>
#include <thread>
#include <mutex>
#include <stdint.h>


uint32_t g_nData;

// 创建全局锁
std::mutex g_mtx;

void foo(void)
{
	{
		std::lock_guard<std::mutex> lg(g_mtx);
		// 或 使用 lock 和 unlock, 但是担心 忘记写 unlock，所以使用局部锁 lock_guard
		// g_mtx.lock();
		for(int i = 0; i < 100000; i++)
		{
			g_nData ++;
		}
		// g_mtx.unlock();
	}

}

int main(int argc, char** argv)
{
	std::thread t(foo);
	
	{
		std::lock_guard<std::mutex> lg(g_mtx);
		// 或 使用 lock 和 unlock
		// g_mtx.lock();
		for(int i = 0; i < 100000; i++)
		{
			g_nData ++;
		}
		// g_mtx.unlock();
	}
	
	
	t.join();
	
	std::cout << g_nData << std::endl;
	
	return 0;
}
